/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BeansGerenciaveis;

import DAO.AnaisDao;
import DAO.ArtigoDao;
import DAO.AutorDao;
import DAO.Conexao;
import DAO.ObraDao;
import DAO.PeriodicoDao;
import DAO.TemaDao;
import bean.Artigo;
import bean.Autor;
import bean.Tema;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author fernando
 */
@ManagedBean
@SessionScoped
public class ArtigoBean implements Serializable{

    /**
     * Creates a new instance of ArtigoBean
     */
    public ArtigoBean() {
        this.artigoDao = new ArtigoDao();
        this.artigo = new Artigo();
        this.temaAdicionado = new Tema();
        this.autorAdicionado = new Autor();
                
    }

    public void novoArtigo() {
        System.out.println("Novo Artigo Criado!");
        this.artigoDao = new ArtigoDao();
        this.artigo = new Artigo();
        this.temaAdicionado = new Tema();
        this.autorAdicionado = new Autor();
              
        
    }
    
    
    public void selecionar() {
        artigo = artigos.getRowData();
    }

    public ArtigoDao getArtigoDao() {
        return artigoDao;
    }

    public void setArtigoDao(ArtigoDao artigoDao) {
        this.artigoDao = artigoDao;
    }

    public Artigo getArtigo() {
        return artigo;
    }

    public void setArtigo(Artigo artigo) {
        this.artigo = artigo;
    }

    public PreparedStatement getPs() {
        return ps;
    }

    public void setPs(PreparedStatement ps) {
        this.ps = ps;
    }

    public void setArtigos(DataModel<Artigo> artigos) {
        this.artigos = artigos;
    }

    public boolean isSucesso() {
        return sucesso;
    }

    public void setSucesso(boolean sucesso) {
        this.sucesso = sucesso;
    }

    public Conexao getConexao() {
        return conexao;
    }

    public void setConexao(Conexao conexao) {
        this.conexao = conexao;
    }

   

    public Autor getAutorAdicionado() {
        return autorAdicionado;
    }

    public void setAutorAdicionado(Autor autorAdicionado) {
        this.autorAdicionado = autorAdicionado;
    }

    public Tema getTemaAdicionado() {
        return temaAdicionado;
    }

    public void setTemaAdicionado(Tema temaAdicionado) {
        this.temaAdicionado = temaAdicionado;
    }

    public String cadastroArtigo() {
        String resultado = "/cadastros/acaoErro";

        artigoDao = new ArtigoDao();

        //id 1 = Sem coleção
        sucesso = artigoDao.cadastrarArtigo(artigo);

        if (sucesso) {
            this.novoArtigo();
            this.carregarArtigos();
            return "/cadastros/obras/artigos/cadastro/cadastroSucesso";

        }
        return resultado;
    }

    public String editarArtigo() {
        String resultado = "/cadastros/acaoErro";

        artigoDao = new ArtigoDao();

        sucesso = artigoDao.alterarArtigo(artigo);

        if (sucesso) {
            this.novoArtigo();
            this.carregarArtigos();
            return "/cadastros/acaoSucesso";

        }
        return resultado;
    }

    public String removerArtigo() {
        String resultado = "/cadastros/acaoErro";

        artigoDao = new ArtigoDao();
        System.out.println("Id do livro excluido: " + artigo.getId());
        sucesso = artigoDao.removerArtigo(artigo);

        if (sucesso) {
            this.novoArtigo();
            this.carregarArtigos();
            return "/cadastros/acaoSucesso";

        }

        return resultado;
    }

    public void addAutor() {
        AutorDao ad = new AutorDao();
        autorAdicionado = ad.consultaAutor(autorAdicionado.getId());
        this.artigo.addAutor(autorAdicionado);
        this.autorAdicionado = new Autor();
    }

    public void removerAutor() {
        boolean remover = this.artigo.getAutores().remove(this.getAutores().getRowData());
    }

    public DataModel<Autor> getAutores() {

        return new ListDataModel<Autor>(this.artigo.getAutores());

    }

    public void addTema() {
        TemaDao td = new TemaDao();
        temaAdicionado = td.consultarTema(temaAdicionado.getId());
        this.artigo.addTema(temaAdicionado);
        this.temaAdicionado = new Tema();
    }

    public void removerTema() {
        boolean remover = this.artigo.getTemas().remove(this.getTemas().getRowData());
    }

    public DataModel<Tema> getTemas() {

        return new ListDataModel<Tema>(this.artigo.getTemas());

    }


    public DataModel<Artigo> getArtigos() {
        if(this.artigos == null){
            this.carregarArtigos();
        }
        return artigos;
    }
    
     public void buscarDadosArtigo(){
        ObraDao od = new ObraDao();
        artigo.setPeriodicoAnal(od.consultaObra(artigo.getPeriodicoAnal().getId()));
          
        
    }
     
    public void carregarArtigos(){
       
        System.out.println("Artigo Bean - CarregarArtigos: Fui executado!");
        artigoDao = new ArtigoDao();
        listaArtigos = artigoDao.listarArtigos();
        artigos = new ListDataModel<Artigo>(listaArtigos);
        
    } 

    public List<Artigo> getListaArtigos() {
        if(listaArtigos == null){
            this.carregarArtigos();
        }
        return listaArtigos;
    }

    public void setListaArtigos(List<Artigo> listaArtigos) {
        this.listaArtigos = listaArtigos;
    }
    
    
    
    private ArtigoDao artigoDao;
    private Artigo artigo;
    private PreparedStatement ps;
    private DataModel<Artigo> artigos;
    private boolean sucesso = false;
    private Conexao conexao;
    private List<Artigo> listaArtigos;
    private Autor autorAdicionado = new Autor();
    private Tema temaAdicionado = new Tema();
    
}
